package com.example.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.common.Result;
import com.example.mapper.BizPartsrepbillMapper;
import com.example.mapper.BizPartsrepertoryMapper;
import com.example.pojo.BizParts;
import com.example.pojo.BizPartsrepbill;
import com.example.pojo.BizPartsrepertory;
import com.example.service.BizPartsrepertoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author 23818
 * &#064;description  针对表【biz_partsrepertory】的数据库操作Service实现
 * &#064;createDate  2023-06-21 16:36:24
 */
@Slf4j
@Service
public class BizPartsrepertoryServiceImpl extends ServiceImpl<BizPartsrepertoryMapper, BizPartsrepertory>
        implements BizPartsrepertoryService {
    @Autowired
    private BizPartsrepertoryMapper bizPartsrepertoryMapper;
    @Autowired
    private BizPartsrepbillMapper bizPartsrepbillMapper;

    /**
     * 入库方法
     *
     * @return boolean
     */
    @Override
    public Result inRep(BizPartsrepbill bizPartsrepbill) {
        QueryWrapper<BizPartsrepertory> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("PartsId", bizPartsrepbill.getPartsid());
        //判断库存中是否有选择的配件（查询库存表,条件是配件ID）
        List<BizPartsrepertory> bizPartsrepertoryList = bizPartsrepertoryMapper.selectList(queryWrapper);
        if (bizPartsrepertoryList.size() > 0) {
            //如果有
            //获得配件的库存+入库的数量
            BizPartsrepertory rep = bizPartsrepertoryList.get(0);
            rep.setPartsreqcount(rep.getPartsreqcount() + bizPartsrepbill.getBillcount());
            log.info(rep.toString());
            bizPartsrepertoryMapper.updateById(rep);
        } else {
            //如果没有
            //新增库存
            BizPartsrepertory rep = new BizPartsrepertory();
            rep.setPartsid(bizPartsrepbill.getPartsid());
            rep.setPartsreqcount(bizPartsrepbill.getBillcount());
            bizPartsrepertoryMapper.insert(rep);
        }
        bizPartsrepbillMapper.insert(bizPartsrepbill);
        //新增入库记录
        return new Result(true);
    }

    /**
     * 出库方法
     *
     * @return boolean
     */
    @Override
    public Result outRep(BizPartsrepbill bizPartsrepbill) {
        //库存是否有该配件
        QueryWrapper<BizPartsrepertory> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("PartsId", bizPartsrepbill.getPartsid());
        List<BizPartsrepertory> bizPartsrepertoryList = bizPartsrepertoryMapper.selectList(queryWrapper);
        if (bizPartsrepertoryList.size() > 0) {
            //如果有
            //查询配件库存
            //库存数量是否满足要求
            BizPartsrepertory rep = bizPartsrepertoryList.get(0);
            if (rep.getPartsreqcount() < bizPartsrepbill.getBillcount()) {
                //不满足--》库存数量小于出库数量
                //业务结束，返回提示消息
                return new Result(false, "库存数量不足");
            } else {
                //满足
                rep.setPartsreqcount(rep.getPartsreqcount() - bizPartsrepbill.getBillcount());
                log.info(rep.toString());
                bizPartsrepertoryMapper.updateById(rep);
            }
            //更新库存数量
            bizPartsrepbillMapper.insert(bizPartsrepbill);
            return new Result(true);
        } else {
            //如果没有
            //业务结束，返回提示消息
            return new Result(false, "库存中没有该配件");
        }
    }


    public List<BizPartsrepertory> findAll(BizParts bizParts) {
        List<BizPartsrepertory> list = bizPartsrepertoryMapper.findALl(bizParts);
        return list;
    }
}
